// 对 axios 进行二次封装
import axios from 'axios'
import { Notify } from 'vant'
import router from '@/router'
import { getToken, removeToken } from '@/utils/token.js'
// axios.defaults.baseURL = 'http://toutiao.itheima.net'
axios.defaults.baseURL = 'http://geek.itheima.net'
axios.defaults.timeout = 8000
// 拦截器统一判断HTTP状态码
// 拦截器改请求头/参数格式

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么----统一携带请求头
  config.headers.Authorization = `Bearer ${getToken()}`
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) { // http状态码: 2xx / 3xx开头
  // 对响应数据做点什么
  return response
}, function (error) { // 4xx/5xx http状态报错
  if (error.response.status === 401) {
    Notify({
      type: 'danger',
      message: '身份过期, 请重新登录'
    })
    // 身份认证失败
    removeToken()
    router.replace('/login') // 切换路由  导入路由
  }
  // 对响应错误做点什么
  return Promise.reject(error)
})

// export default axios
// 为了方便以后的替换，所以又套了一层，没有直接导出axios
// axios--->request 叫啥都可以----导出axios
export default ({ url, method, params, data, headers }) => {
  return axios({
    url,
    data,
    params,
    method,
    headers
  })
}
// 为何要二次封装axios函数?

// 为了让我们的代码更加灵活, 统一管理

// 以后换库, 只需要改这里, 逻辑页面不用动, 保证代码的复用性和独立性(高内聚低耦合)
//   return $.ajax({
//     url: url,
//     type: method,
//     data: data,
//     header: headers
//   })
